package com.feng.freader.view.activity;

import static com.bytedance.sdk.openadsdk.TTAdLoadType.PRELOAD;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.DislikeInfo;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdDislike;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
import com.bytedance.sdk.openadsdk.TTNativeExpressAd;
import com.feng.freader.R;
import com.feng.freader.util.Const;
import com.feng.freader.util.UIUtils;

import java.util.List;

/**
 * 融合demo，banner广告使用示例
 *
 * 注意：每次加载的广告，只能展示一次
 *
 * 接入步骤：
 * 1、创建AdSlot对象
 * 2、创建TTAdNative对象
 * 3、创建加载、展示监听器
 * 4、加载广告
 * 5、加载成功后，展示广告
 */
public class MediationBannerActivity extends Activity {
    public String mMediaId; // 融合广告位
    private TTNativeExpressAd mBannerAd; // Banner广告对象
    private TTAdNative.NativeExpressAdListener mBannerListener; // 广告加载监听器
    private TTNativeExpressAd.ExpressAdInteractionListener mBannerInteractionListener; // 广告展示监听器
    private TTAdDislike.DislikeInteractionCallback mDislikeCallback; // 接受广告关闭回调
    private FrameLayout mBannerContainer; // banner广告容器view

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mediation_activity_banner);

        // 聚合广告位（在GroMore平台的广告位，注意不是adn的代码位）
//        this.mMediaId = "958118699";
        this.mMediaId = "958210261";
//        TextView tvMediationId = (TextView)this.findViewById(R.id.tv_media_id);
//        tvMediationId.setText(getString(R.string.ad_mediation_id, this.mMediaId));

        // banner广告容器
        mBannerContainer = findViewById(R.id.banner_container);

        // 广告加载
        findViewById(R.id.bt_load).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loadBannerAd();
            }
        });
        // 广告展示
        findViewById(R.id.bt_show).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showBannerAd();
            }
        });

        // 自动加载显示
        loadBannerAd();
        showBannerAd();
    }

    private void loadBannerAd() {
        /** 1、创建AdSlot对象 */
//        AdSlot adSlot = new AdSlot.Builder()
//                .setCodeId(this.mMediaId)
//                .setImageAcceptedSize(UIUtils.dp2px(this, 320f), UIUtils.dp2px(this, 150f)) // 单位px
//                .setMediationAdSlot(new MediationAdSlot.Builder()
//                        // Banner混出自渲染信息流时使用，将信息流素材渲染成View返回
//                        .setMediationNativeToBannerListener(new MediationNativeToBannerListener() {
//                            @Nullable
//                            @Override
//                            public View getMediationBannerViewFromNativeAd(IMediationNativeAdInfo iMediationNativeAdInfo) {
//                                return MediationNativeToBannerUtils.getCSJMBannerViewFromNativeAd(iMediationNativeAdInfo, activity);
//                            }
//                        })
//                        .build())
//                .build();

        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(this.mMediaId) //广告位id
                .setSupportDeepLink(true)
                .setAdCount(1) //请求广告数量为1
                .setExpressViewAcceptedSize(300f,150f) //期望模板广告view的size,单位dp
                .setAdLoadType(PRELOAD)//推荐使用，用于标注此次的广告请求用途为预加载（当做缓存）还是实时加载，方便后续为开发者优化相关策略
                .build();

        /** 2、创建TTAdNative对象 */
        TTAdNative adNativeLoader = TTAdSdk.getAdManager().createAdNative(this);

        /** 3、创建加载、展示监听器 */
        initListeners();

        /** 4、加载广告 */
        adNativeLoader.loadBannerExpressAd(adSlot, mBannerListener);
    }

    /**     5、广告加载成功后，设置监听器，展示广告 */
    private void showBannerAd() {
//        if (mBannerAd != null) {
//            mBannerAd.setExpressInteractionListener(mBannerInteractionListener);
//            mBannerAd.setDislikeCallback(this, mDislikeCallback);
//            View bannerView = mBannerAd.getExpressAdView();
//            if (bannerView != null && mBannerContainer != null) {
//                mBannerContainer.removeAllViews();
//                mBannerContainer.addView(bannerView);
//            }
//        } else {
//            Log.d(Const.TAG, "请先加载广告或等待广告加载完毕后再展示广告");
//        }

        if (mBannerAd != null) {
            mBannerAd.render();
        } else {
            Log.d(Const.TAG, "请先加载广告..");
        }
    }

    private void initListeners() {
        this.mBannerListener = new TTAdNative.NativeExpressAdListener() {
            @Override
            public void onError(int i, String s) {
                Log.d(Const.TAG, "banner load fail: errCode: " + i + ", errMsg: " + s);
            }

            @Override
            public void onNativeExpressAdLoad(List<TTNativeExpressAd> list) {
                if (list != null && list.size() > 0) {
                    Log.d(Const.TAG, "banner load success");
                    mBannerAd = list.get(0);
                    mBannerAd.setSlideIntervalTime(30 * 1000);
                    bindAdListener(mBannerAd);
                } else {
                    Log.d(Const.TAG, "banner load success, but list is null");
                }

            }
        };
        this.mBannerInteractionListener = new TTNativeExpressAd.ExpressAdInteractionListener() {
            @Override
            public void onAdClicked(View view, int i) {
                Log.d(Const.TAG, "banner clicked");
            }

            @Override
            public void onAdShow(View view, int i) {
                Log.d(Const.TAG, "banner showed");
            }

            @Override
            public void onRenderFail(View view, String s, int i) {
                Log.d(Const.TAG, "banner renderFail, errCode" + i + ", errMsg: " + s);
            }

            @Override
            public void onRenderSuccess(View view, float v, float v1) {
                Log.d(Const.TAG, "banner render success");
            }
        };
        this.mDislikeCallback = new TTAdDislike.DislikeInteractionCallback() {
            @Override
            public void onShow() { }

            @Override
            public void onSelected(int i, String s, boolean b) {
                Log.d(Const.TAG, "banner closed");
            }

            @Override
            public void onCancel() { }
        };
    }

    private void bindAdListener(TTNativeExpressAd ad) {

        ad.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {
            @Override

            public void onAdClicked(View view, int type) {
                Log.d(Const.TAG,  "广告被点击");
            }

            @Override

            public void onAdShow(View view, int type) {
                Log.d(Const.TAG,  "广告展示");
            }

            @Override
            public void onRenderFail(View view, String msg, int code) {
//                Log.e("ExpressView", "render fail:" + (System.currentTimeMillis() - startTime));
                Log.d(Const.TAG,  msg + " code:" + code);
            }

            @Override
            public void onRenderSuccess(View view, float width, float height) {
//                Log.e("ExpressView", "render suc:" + (System.currentTimeMillis() - startTime));
                //返回view的宽高 单位 dp
                Log.d(Const.TAG,  "渲染成功");
                mBannerContainer.removeAllViews();
                mBannerContainer.addView(view);
            }
        });
        //dislike设置
        bindDislike(ad, false);

        if (ad.getInteractionType() != TTAdConstant.INTERACTION_TYPE_DOWNLOAD) {
            return;
        }
        ad.setDownloadListener(new TTAppDownloadListener() {
            @Override
            public void onIdle() {
                Log.d(Const.TAG,  "点击开始下载");
            }

            @Override
            public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {

            }

            @Override
            public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {
                Log.d(Const.TAG,  "下载暂停，点击继续");
            }

            @Override
            public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {
                Log.d(Const.TAG,  "下载失败，点击重新下载");

            }

            @Override
            public void onInstalled(String fileName, String appName) {
                Log.d(Const.TAG,  "安装完成，点击图片打开");
            }

            @Override
            public void onDownloadFinished(long totalBytes, String fileName, String appName) {
                Log.d(Const.TAG,  "点击安装");
            }
        });
    }

    private void bindDislike(TTNativeExpressAd ad, boolean customStyle) {
        //使用默认模板中默认dislike弹出样式

        ad.setDislikeCallback(MediationBannerActivity.this, new TTAdDislike.DislikeInteractionCallback() {
            @Override
            public void onShow() {

            }

            @Override
            public void onSelected(int position, String value, boolean enforce) {
                Log.d(Const.TAG, "点击 " + value);
                mBannerContainer.removeAllViews();
                //用户选择不喜欢原因后，移除广告展示
                if (enforce) {
                    Log.d(Const.TAG,"模版Banner 穿山甲sdk强制将view关闭了");
                }
            }

            @Override
            public void onCancel() {
                Log.d(Const.TAG,  "点击取消 ");
            }

        });
    }
}
